package br.com.vpsa.previdordevendas.model.entity;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Calendar;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Transient;

import br.com.vpsa.previdordevendas.model.pojo.EntidadePojo;
import br.com.vpsa.previdordevendas.model.util.CalendarUtils;
import br.com.vpsa.previdordevendas.model.util.MoedaUtil;

@Entity
public class Declinio {

    @Id
    @GeneratedValue
	private Long id;
    
    private String nome;
    
    private String base;
    
    private Long idEntidade;
    
    @Transient
    private EntidadePojo entidade;
    
    private Date dataInicial;
    
    private Date dataFinal;
    
    private BigDecimal porcentagem;
    
	public BigDecimal getPorcentagem() {
		return porcentagem;
	}

	public BigDecimal getPorcentagemReal() {
		return porcentagem.divide( new BigDecimal(100), 2, RoundingMode.HALF_EVEN );
	}

	public String getPorcentagemFormatada() {
		return MoedaUtil.convert(porcentagem);
	}

	public void setPorcentagem(BigDecimal porcentagem) {
		this.porcentagem = porcentagem;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getBase() {
		return base;
	}

	public void setBase(String base) {
		this.base = base;
	}

	public Long getIdEntidade() {
		return idEntidade;
	}

	public void setIdEntidade(Long idEntidade) {
		this.idEntidade = idEntidade;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public EntidadePojo getEntidade() {
		return entidade;
	}

	public void setEntidade(EntidadePojo entidade) {
		this.entidade = entidade;
	}

	public String getDataInicialFormatada() {
		if( dataInicial == null ){
			return null;
		}
		return CalendarUtils.DATA_SIMPLES.format(dataInicial);
	}

	public String getDataFinalFormatada() {
		if( dataFinal == null ){
			return null;
		}
		return CalendarUtils.DATA_SIMPLES.format(dataFinal);
	}
	
	public Date getDataInicial() {
		return dataInicial;
	}

	public void setDataInicial(Date dataInicial) {
		this.dataInicial = dataInicial;
	}

	public Date getDataFinal() {
		return dataFinal;
	}

	public void setDataFinal(Date dataFinal) {
		this.dataFinal = dataFinal;
	}

	public Calendar getCalendarDataFinal() {
		if( dataFinal == null ){
			return null;
		}
		
		Calendar dataFinal = CalendarUtils.getCalendar(this.dataFinal);
		dataFinal.set(Calendar.DAY_OF_MONTH , dataFinal.getActualMaximum(Calendar.DAY_OF_MONTH) );
		return dataFinal;
	}

}
